package cn.com.huzo.repository.tech;

import cn.com.huzo.model.entities.tech.MrpLinesAssortmentEntity;
import huzofw.repository.GenericRepository;
import java.util.List;

/**
 * 物料需求计划-搭配数据访问对象接口
 *
 * @author 吴旭
 */
public interface MrpLinesAssortmentRepository extends GenericRepository<MrpLinesAssortmentEntity, String> {

    /**
     * 根据物料需求计划标识取得搭配明细。
     *
     * @param headerId 物料需求计划标识
     * @return 搭配明细
     */
    List<MrpLinesAssortmentEntity> fetchByHeaderId(Long headerId);

    /**
     * 单一搭配计算
     * <p>
     * @param headerId 物料需求计划标识
     * @param assortmentLinesId 当前行标识
     * @param moHeaderId 计算用生产指示书标识
     * @param styleNo 款号
     * @param assortmentSize 搭配计算用的尺码
     * @param assortmentType 搭配类型
     * @param calByDestinationFlag 是否按目的地分配数量进行计算标记
     * @param assortmentDestination 搭配计算用发货目的地
     * @return 影响行数
     */
    Integer singleAssort(Long headerId, String assortmentLinesId, Long moHeaderId,
            String styleNo, List<Integer> assortmentSize, Short assortmentType,
            Boolean calByDestinationFlag, List<String> assortmentDestination);

    /**
     * 批量搭配计算
     * <p>
     * @param headerId 物料需求计划标识
     * @param moHeaderId 物料需求计划所引用的国贸指示书标识
     * @param styleNo 款号
     * @param assortmentType 搭配类型 0 无搭配 1 颜色搭配 2 尺码搭配 3 颜色+尺码搭配
     * @return 影响行数
     */
    Integer batchAssort(Long headerId, Long moHeaderId, String styleNo, Short assortmentType);

    /**
     * 用历史数据更新每种材料的搭配类型
     * <p>
     * @param headerId 要更新的物料搭配计划标识
     * @param relatedHeaderId 其他类似的物料需求计划的材料搭配计算类型
     * @param updatedBy 更新者
     * @return 影响行数
     */
    Integer updateByHistoryData(Long headerId, Long relatedHeaderId, Long updatedBy);

    /**
     * 将关联单耗新增加的数据插入到搭配明细表
     *
     * @param headerId 物料搭配计划标识
     * @param bomHeaderId 计算用单耗标识
     * @param updatedBy 更新者
     * @return
     */
    Integer insertLinesForSyncBom(Long headerId, Long bomHeaderId, Long updatedBy);

    /**
     * 将新增加的数据标记为无搭配（由 9 -〉0）
     *
     * @param headerId
     * @param updatedBy
     * @return 影响行数
     */
    Integer updateTypeForNewLines(Long headerId, Long updatedBy);

    /**
     * 根据提前组料单更新定版调达表的搭配类型
     *
     * @param headerId 定版调达表ID
     * @param priorMrpHeaderId 提前组料单ID
     * @param bomHeaderId 定版调达用单耗表ID
     * @param updatedBy 操作者
     * @return 影响行数
     */
    Integer updateTypeByPriorMrp(Long headerId, Long priorMrpHeaderId, Long bomHeaderId, Long updatedBy);

    /**
     * 根据提前组料单的搭配尺码更新定版调达相应数据
     *
     * @param headerId 定版调达表ID
     * @param priorMrpHeaderId 提前组料单ID
     * @param updatedBy 操作者
     * @return 影响行数
     */
    Integer insertAssormentSizeByPriorMrp(Long headerId, Long priorMrpHeaderId, Long updatedBy);

    /**
     * 清空用来引入尺码搭配数据的提前组料搭配明细ID字段内容
     *
     * @param headerId 定版调达表ID
     * @return 影响行数
     */
    Integer cleanPriorMrpAssortmentLinesId(Long headerId);

    /**
     * 删除搭配明细中有而对应的单耗表中没有的数据，即删除多余的数据
     *
     * @param headerId 物料搭配计划标识
     * @param bomHeaderId 计算用单耗标识
     * @return 影响行数
     */
    Integer deleteLinesForSyncBom(Long headerId, Long bomHeaderId);

    /**
     * 删除该材料的搭配计算用的尺码
     *
     * @param headerId 物料需求计划标识
     * @param assortmentLinesId 搭配计算明细标识
     * @return 影响行数
     */
    Integer deleteLinesAssortmentSize(Long headerId, String assortmentLinesId);

    /**
     * 记录搭配计算用尺码
     *
     * @param headerId 物料需求计划标识
     * @param assortmentLinesId 当前行标识
     * @param assortmentSize 搭配计算用的尺码
     * @return 影响行数
     */
    Integer insertLinesAssortmentSize(Long headerId, String assortmentLinesId, List<Integer> assortmentSize);
}
